# 데이터베이스의 구성

# 데이터베이스의 정의

정의

데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음입니다.

  • 통합된 데이터(Integrated Data)
    • 자료의 중복을 배제한 데이터의 모임입니다.
  • 저장된 데이터(Stored Data)
    • 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료입니다.
  • 운영 데이터(Operational Data)
    • 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안 될 반드시 필요한 자료입니다.
  • 공용 데이터(Shared Data)
    • 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료입니다.

# 데이터베이스의 특징

  • 실시간 접근성(Real-Time Accessibility)
    • 수시적이고 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 합니다.
  • 계속적인 변화(Continuous Evolution)
    • 데이터베이스의 상태는 동적입니다. 즉 새로운 데이터의 삽입(Insert),삭제(Delete),갱신(Update)로 항상 최신의 데이터를 유지합니다.
  • 동시공용(Concurrent Sharing)
    • 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.
  • 내용에 의한 참조(Content Reference)
    • 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라, 사용자가 요구하는 데이터 내용으로 데이터를 찾습니다.

image

  • 데이터베이스 위에 DBMS, DBMS 위에 응용프로그램이 있으며, 해당 구조를 기반으로 데이터를 주고 받습니다.
  • 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)이라고 합니다.

# 엔터티 (Entity)

정의

엔터티는 사람, 장소, 물건, 사건, 개념 등 여러개의 속성을 지닌 명사를 의미합니다.

# 약한 엔터티와 강한 엔터티

  • A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔터티이고 B는 강한 엔터티입니다.
  • 예로, 방은 건물 안에만 존재하기에 방은 약한 엔터티, 건물은 강한 엔터티가 됩니다.

# 릴레이션 (Relation)

정의

릴레이션은 데이터베이스에서 정보를 구분하여 저장하는 기본 단위입니다.

  • 엔터티에 관한 데이터를 데이터베이스는 릴레이션 하나에 담아서 관리합니다.
  • 릴레이션은 관계형 데이터베이스에서는 테이블이라고 하며, NoSQL 데이터베이스에서는 '컬렉션'이라고 합니다.

# 테이블과 컬렉션

데이터베이스는 관계형 데이터베이스와 NoSQL 데이터베이스로 구분할 수 있습니다.

  • MySQL의 구조는 레코드 - 테이블 - 데이터베이스로 구성되어 있습니다.
  • MongoDB의 구조는 도큐먼트 - 컬렉션 - 데이터베이스로 구성되어 있습니다.

# 속성 (Attribute)

정의

속성은 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보입니다.

  • 서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 됩니다.

# 도메인 (Domain)

정의

도메인이란 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합을 말합니다.

  • 예로 성별이라는 속성의 도메인은 [남, 여]라는 집합입니다.

# 필드와 레코드

image

  • 테이블에 쌓이는 행 당위의 데이터를 레코드라고 하며, 튜플이라고도 부릅니다.

# 필드 타입

# 숫자 타입

image

# 날짜 타입

  • DATE
    • 3바이트
    • 1000-01-01 ~ 9999-12-31
  • DATETIME
    • 8바이트
    • 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  • TIMESTAMP
    • 4바이트
    • 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07

# 문자 타입

  • CHAR & VARCHAR
    • CHAR는 고정 길이 문자열 입니다.
    • VARCHAR 가변 길이 문자열 입니다.
      • 10글자를 저장할 경우, 10글자 바이트 + 길이 기록용 1바이트 = 총 11바이트를 사용합니다.
    • CHAR는 검색에 유리하고, VARCHAR는 유동적인 길이를 가진 데이터를 저장할 때 적합합니다.
  • TEXT & BLOB
    • 두 타입 모두 큰 데이터를 저장할 때 사용합니다.
    • TEXT는 큰 문자열 저장에 사용하며, 게시판 본문 저장용으로 사용됩니다.
    • BLOB은 이미지, 동영상 등 큰 데이터 저장에 사용합니다.
      • 근데 일반적으로 S3에 저장해서 URL을 VARCHAR로 저장합니다.
  • ENUM & SET
    • 두 타입 모두 문자열 열거 타입입니다.
    • ENUM은 ENUM('남자', '여자') 형태로 쓰이며, 단일 선택만 가능합니다.
      • 이 중에 없는 갑을 삽입할 경우 빈 문자열이 삽입됩니다.
      • 0, 1로 매핑되어 메모리를 적게 사용하며, 최대 65,535개의 요소를 넣을 수 있습니다.
    • SET은 여러개의 데이터를 사용할 수 있으며, 비트 단위 연산이 가능합니다.
      • 최대 64개의 요소를 넣을 수 있습니다.
    • ENUM과 SET을 사용 할 경우 공간적으로 이점을 볼 수 있지만 애플리케이션 수정에 따라 해당 목록을 수정해야 한다는 단점이 있습니다.

# 관계

데이터베이스의 여러개의 테이블은 서로의 관계가 정의되어 있습니다.

# One to One 관계

image

  • 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계를 one to one 관계라고 합니다.
  • 1:1 관계는 테이블을 두개의 테이블로 나워 테이블의 구조를 더 이해하기 쉽게 만들어 줍니다.

# One To Many

image

  • 테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 one to many 관계라고 합니다.
  • 한 개의 개체가 다른 많은 개체를 포함하는 관계입니다.

# Many To Many

image

  • 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 합니다.
  • N:M 테이블 두개를 직접적으로 연결해서 구축하지 않고, 1:N, 1:M이란 관계를 갖는 테이블 두개로 나눠서 설계합니다.

# 키 (Key)

정의

테이블 간의 관계를 조금 더 명확하게 하고, 테이블 자체의 인덱스를 위해 설정된 장치입니다.

image

용어

유일성 : 중복되는 값이 없음

최소성 : 필드를 조합하지 않고 필드만 써서 키를 형성할 수 있는 것

# 기본키 (Primary key)

  • 기본키는 PK라고 줄여 사용하기도 하며, 유일성과 최소성을 만족하는 키입니다.
  • 테이블에서 기본키는 오직 1개만 지정할 수 있으며, NULL 값과 중복된 값을 가질 수 없습니다.
  • 기본키는 자연키 또는 인조키 중에 골라 설정합니다.

# 자연키

  • 중복된 값들을 제외하며 중복되지 않는 것들을 자연스레 추출하다가 나온 키를 자연키라고 합니다.
  • 언젠가는 변하는 속성을 지닙니다.

# 인조키

  • 인위적으로 아이디를 부여하여, 만들어지는 식별자를 말합니다.
  • 자연키와는 대조적으로 변하지 않기에, 보통 기본키는 인조키로 설정합니다.

# 외래키 (Foreign Key)

  • 외래키는 FK라고 줄여 사용하기도 하며, 다른 테이블의 기본키를 그대로 참조하는 값입니다.
  • 개체와의 관계를 식별하는데 사용되며, 외래키는 중복되어도 괜찮습니다.
  • 참조되는 부모테이블이 먼저 생성된 뒤 데이터를 넣고, 참조하는 자식 테이블이 다음에 생겨야 합니다.
  • 부모테이블이 삭제되면 자식테이블은 참조하는 것이 없어지기 때문에 외래키 오류가 발생하므로, 자식테이블 먼저 삭제한 후 부모테이블을 삭제해야 합니다.

# 슈퍼 키(Super Key)

  • 각 레코드를 유일하게 식별할 수 있는 유일성을 만족하는 키입니다.

# 후보 키(Candidate key)

  • 기본키가 될 수 있는 후보들이며, 유일성과 최소성을 만족하는 키입니다.

# 대체 키(Alternate key)

  • 후보 키가 두개 이상일 경우 어느 하나를 기본 키로 지정하고 남은 후보키를 말합니다.

# 참고자료